import java.util.ArrayList;
import java.util.List;

public class Num1253 {
    /*
    给你一个2行 n 列的二进制数组：
    矩阵是一个二进制矩阵，这意味着矩阵中的每个元素不是0就是1。
    第 0 行的元素之和为upper。
    第 1 行的元素之和为 lower。
    第 i 列（从 0 开始编号）的元素之和为colsum[i]，colsum是一个长度为n的整数数组。1253. 重构 2 行二进制矩阵
    你需要利用upper，lower和colsum来重构这个矩阵，并以二维整数数组的形式返回它。
     */
    public List<List<Integer>> reconstructMatrix(int upper, int lower, int[] colsum) {
        List<List<Integer>> lists = new ArrayList<>();
        long sum = 0;
        for (int num : colsum) {
            sum += num;
        }
        if (sum != (upper + lower)) {
            return lists;
        }
        int n = colsum.length;
        int[][] arr = new int[2][n];
        for (int i = 0; i < n; i++) {
            if (colsum[i] == 2) {
                arr[0][i] = 1;
                arr[1][i] = 1;
                upper--;
                lower--;
            }
        }
        for (int i = 0; i < n; i++) {
            if (colsum[i] == 0 || colsum[i] == 2) {
                continue;
            } else {
                if (upper != 0) {
                    arr[0][i] = 1;
                    upper--;
                } else {
                    arr[1][i] = 1;
                    lower--;
                }
            }
        }
        if (0 != upper || 0 != lower) return new ArrayList<>();
        for (int i = 0; i < 2; i++) {
            List<Integer> list = new ArrayList<>();
            for (int j = 0; j < n; j++) {
                list.add(arr[i][j]);
            }
            lists.add(list);
        }
        return lists;
    }
}
